home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Rozne / HTTrack 3.40-2 / httrack-3.40-2.exe / {app} / src / webhttrack < prev    next >
Text File  |  2006-04-03  |  6KB  |  185 lines

  1. #!/bin/bash
  2. #
  3. # WebHTTrack launcher script
  4. # Initializes the htsserver GUI frontend and launch the default browser
  5.  
  6. BROWSEREXE=
  7. SRCHBROWSEREXE="x-www-browser www-browser mozilla firefox firebird galeon konqueror opera netscape"
  8. if test -n "${BROWSER}"; then
  9. # sensible-browser will f up if BROWSER is not set
  10. SRCHBROWSEREXE="sensible-browser ${SRCHBROWSEREXE}"
  11. fi
  12. SRCHPATH="/usr/local/bin /usr/share/bin /usr/bin /usr/lib/httrack /usr/local/lib/httrack /usr/local/share/httrack /sw/bin ${HOME}/usr/bin ${HOME}/bin"
  13. SRCHPATH="$SRCHPATH "`echo $PATH | tr ":" " "`
  14. SRCHDISTPATH="/usr/share /usr/local /usr /local /usr/local/share ${HOME}/usr ${HOME}/usr/share /sw ${HOME}/usr/local ${HOME}/usr/share"
  15.  
  16. ###
  17. # And now some famous cuisine
  18.  
  19. function log {
  20. echo "$0($$): $@" >&2
  21. return 0
  22. }
  23.  
  24. function mozillabrowser {
  25. # returns 0, if the browser is mozilla type
  26. echo "$1" | grep -q "mozilla"
  27. [ $? -eq 0 ] && return 0 
  28. echo "$1" | grep -q "netscape"
  29. [ $? -eq 0 ] && return 0 
  30. echo "$1" | grep -q "firebird"
  31. [ $? -eq 0 ] && return 0 
  32. echo "$1" | grep -q "firefox"
  33. [ $? -eq 0 ] && return 0 
  34. return 1;
  35. }
  36. function mozillaloaded  {
  37. user_name=`logname 2>/dev/null`
  38. if ! test -n "${user_name}"; then
  39. user_name=`id -un`
  40. fi
  41. if test -n "${user_name}"; then
  42. ps -e --user "$user_name" | grep -qE "(mozilla|netscape|firebird|firefox)"
  43. else
  44. false
  45. fi
  46. }
  47.  
  48. function launch_browser {
  49. log "launching $1"
  50. start_t=`date +%s`
  51. browser=$1
  52. url=$2
  53. moz=
  54. if mozillaloaded; then
  55. moz=1
  56. fi
  57. # launch any browser
  58. # if it is a mozilla like browser, check if the browser is running and use 
  59. # -remote if needed. Change the URL into openURL($url) too. 
  60. # (thanks to Torsten Werner for the patch)
  61. # see http://www.mozilla.org/unix/remote.html
  62. # 04/2006: openurl() fix from Samuel Suther
  63. if mozillabrowser ${browser}; then
  64.     if ! ${browser} -remote "openurl(${url})"; then
  65.         log "spawning browser.."
  66.         ${browser} "${url}"
  67.     fi
  68. else
  69.     log "spawning regular browser.."
  70.     ${browser} "${url}"
  71. fi
  72. # this is a real pain in the neck: browser can hiddenly use the -remote feature of
  73. # mozilla and therefore return immediately
  74. # this loop is the only reliable solution AFAIK
  75. end_t=`date +%s`
  76. if test -n "$start_t" -a -n "$end_t"; then
  77.     int_t=$[$end_t-$start_t]
  78. else
  79.     int_t=0
  80. fi
  81. if test -n "${int_t}" -a "${int_t}" -lt 60; then
  82.     if test -n "$moz"; then
  83.         log "waiting for browser to terminate.."
  84.         while mozillaloaded; do
  85.             sleep 3
  86.         done
  87.         log "browser seems to have been closed.."
  88.     fi
  89. fi
  90. log "browser exited"
  91. }
  92.  
  93. # First ensure that we can launch the server
  94. BINPATH=
  95. for i in ${SRCHPATH}; do
  96.     ! test -n "${BINPATH}" && test -x ${i}/htsserver && BINPATH=${i}
  97. done
  98. for i in ${SRCHDISTPATH}; do
  99.     ! test -n "${DISTPATH}" && test -f "${i}/httrack/lang.def" && DISTPATH="${i}/httrack"
  100. done
  101. test -n "${BINPATH}" || ! log "could not find htsserver" || exit 1
  102. test -n "${DISTPATH}" || ! log "could not find httrack directory" || exit 1
  103. test -f ${DISTPATH}/lang.def || ! log "could not find ${DISTPATH}/lang.def" || exit 1
  104. test -f ${DISTPATH}/lang.indexes || ! log "could not find ${DISTPATH}/lang.indexes" || exit 1
  105. test -d ${DISTPATH}/lang || ! log "could not find ${DISTPATH}/lang" || exit 1
  106. test -d ${DISTPATH}/html || ! log "could not find ${DISTPATH}/html" || exit 1
  107.  
  108. # Locale
  109. HTSLANG="${LC_MESSAGES}"
  110. ! test -n "${HTSLANG}" && HTSLANG="${LC_ALL}"
  111. ! test -n "${HTSLANG}" && HTSLANG="${LANG}"
  112. test -n "${HTSLANG}" && HTSLANG="`echo ${HTSLANG} | cut -c1-2` | tr 'A-Z' 'a-z'"
  113. LANGN=`grep "${HTSLANG}:" ${DISTPATH}/lang.indexes | cut -f2 -d':'`
  114. ! test -n "${LANGN}" && LANGN=1
  115.  
  116. # Find the browser
  117. # note: not all systems have sensible-browser or www-browser alternative
  118. # thefeore, we have to find a bit more if sensible-browser could not be found
  119.  
  120. for i in ${SRCHBROWSEREXE}; do
  121. for j in ${SRCHPATH}; do
  122. if test -x ${j}/${i}; then
  123. BROWSEREXE=${j}/${i}
  124. fi
  125. test -n "$BROWSEREXE" && break
  126. done
  127. test -n "$BROWSEREXE" && break
  128. done
  129. test -n "$BROWSEREXE" || ! log "cound not find any suitable browser" || exit 1
  130.  
  131. # "browse" command
  132. if test "$1" = "browse"; then
  133. if test -f "${HOME}/.httrack.ini"; then
  134. INDEXF=`cat ${HOME}/.httrack.ini | tr '\r' '\n' | grep -E "^path=" | cut -f2- -d'='`
  135. if test -n "${INDEXF}" -a -d "${INDEXF}" -a -f "${INDEXF}/index.html"; then
  136. INDEXF="${INDEXF}/index.html"
  137. else
  138. INDEXF=""
  139. fi
  140. fi
  141. if ! test -n "$INDEXF"; then 
  142. INDEXF="${HOME}/websites/index.html"
  143. fi
  144. launch_browser "${BROWSEREXE}" "file://${INDEXF}"
  145. exit $?
  146. fi
  147.  
  148. # Create a temporary filename
  149. TMPSRVFILE="/tmp/.webhttrack.$$.`head -c16 /dev/random | md5sum | cut -f1 -d' '`"
  150. >${TMPSRVFILE} || ! log "cound not create the temporary file ${TMPSRVFILE}" || exit 1
  151. # Launch htsserver binary and setup the server
  152. (${BINPATH}/htsserver "${DISTPATH}/" path "${HOME}/websites" lang "${LANGN}" $@; echo SRVURL=error) > ${TMPSRVFILE}&
  153. # Find the generated SRVURL
  154. SRVURL=
  155. MAXCOUNT=60
  156. while ! test -n "$SRVURL"; do
  157. MAXCOUNT=$[$MAXCOUNT - 1]
  158. test $MAXCOUNT -gt 0 || exit 1
  159. test $MAXCOUNT -lt 50 && echo "waiting for server to reply.."
  160. SRVURL=`grep -E URL= ${TMPSRVFILE} | cut -f2- -d=`
  161. test ! "$SRVURL" = "error" || ! log "could not spawn htsserver" || exit 1
  162. test -n "$SRVURL" || sleep 1
  163. done
  164.  
  165. # Cleanup function
  166. function cleanup {
  167. test -n "$1" && log "nasty signal caught, cleaning up.."
  168. test -f ${TMPSRVFILE} && SRVPID=`grep -E PID= ${TMPSRVFILE} | cut -f2- -d=`
  169. test -n "${SRVPID}" && kill -9 ${SRVPID}
  170. test -f ${TMPSRVFILE} && rm ${TMPSRVFILE}
  171. test -n "$1" && log "..done"
  172. return 0
  173. }
  174.  
  175. # Cleanup in case of emergency
  176. trap "cleanup now; exit" 1 2 3 4 5 6 7 8 9 11 13 14 15 16 19 24 25
  177.  
  178. # Got SRVURL, launch browser
  179. launch_browser "${BROWSEREXE}" "${SRVURL}"
  180.  
  181. # That's all, folks!
  182. trap "" 1 2 3 4 5 6 7 8 9 11 13 14 15 16 19 24 25
  183. cleanup
  184. exit 0
  185.